﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using PiscoSourDominio;
using PiscoSourSOAPRestServices.Persistencia;
using Dapper;

namespace PiscoSourPersistencia
{
    public class LocalDAO
    {
        public string InsertarLocal(Local local)
        {
            try
            {
                using (var sqlConnection = ConnectionFactory.GetConnection())
                {

                    sqlConnection.Open();
                    string sqlQuery = "INSERT INTO PRS_LOCAL(vchNombre,vchDireccion,vchDistrito,vchReferencia,intCapacidad,blnEstado,intCodigo,vchUsuario) VALUES (@vchNombre,@vchDireccion,@vchDistrito,@vchReferencia,@intCapacidad,@blnEstado,@vchUsuario)";
                    sqlConnection.Execute(sqlQuery,
                        new
                        {
                            vchNombre = local.vchNombre,
                            vchDireccion = local.vchDireccion,
                            vchDistrito = local.vchDistrito,
                            vchReferencia = local.vchReferencia,
                            intCapacidad = local.intCapacidad,
                            vchUsuario = local.vchUsuario
                        });

                    sqlConnection.Close();
                    return "";
                }
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }

        public string ActualizarLocal(Local local)
        {
            try
            {
                using (var sqlConnection = ConnectionFactory.GetConnection())
                {
                    sqlConnection.Open();
                    string sqlQuery = "UPDATE PRS_LOCAL SET vchNombre=@vchNombre,vchDireccion=@vchDireccion,vchDistrito=@vchDistrito,vchReferencia=@vchReferencia,intCapacidad=@intCapacidad,blnEstado=@blnEstado,vchUsuario=@vchUsuario WHERE intCodLocal=@intCodLocal";
                    sqlConnection.Execute(sqlQuery,
                        new
                        {
                            intCodLocal = local.intCodLocal,
                            vchNombre = local.vchNombre,
                            vchDireccion = local.vchDireccion,
                            vchDistrito = local.vchDistrito,
                            vchReferencia = local.vchReferencia,
                            intCapacidad = local.intCapacidad,
                            vchUsuario = local.vchUsuario
                        });

                    sqlConnection.Close();
                    return "";
                }
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }

        public string EliminarLocal(Local local)
        {
            try
            {
                using (var sqlConnection = ConnectionFactory.GetConnection())
                {

                    sqlConnection.Open();
                    string sqlQuery = "DELETE FROM PRS_LOCAL WHERE intCodLocal=@intCodLocal";
                    sqlConnection.Execute(sqlQuery,
                        new
                        {
                            intCodLocal = local.intCodLocal
                        });

                    sqlConnection.Close();
                    return "";
                }
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }

        public Local ObtenerLocal(int codigo)
        {
            using (var sqlConnection = ConnectionFactory.GetConnection())
            {
                sqlConnection.Open();
                const string sqlQuery = "select * from prs_local where intCodLocal=@intCodLocal";
                var local = sqlConnection.Query<Local>(sqlQuery, new { intCodLocal = codigo }).FirstOrDefault<Local>();

                sqlConnection.Close();

                return local;
            }
        }

        public Local ObtenerUsuarioLocal(string codigo)
        {
            using (var sqlConnection = ConnectionFactory.GetConnection())
            {
                sqlConnection.Open();
                const string sqlQuery = "select * from prs_local where vchUsuario=@vchUsuario";
                var local = sqlConnection.Query<Local>(sqlQuery, new { vchUsuario = codigo }).FirstOrDefault<Local>();

                sqlConnection.Close();

                return local;
            }
        }

        public IEnumerable<Local> ListarLocales()
        {
            using (var sqlConnection = ConnectionFactory.GetConnection())
            {
                sqlConnection.Open();
                var sqlQuery = string.Format(@"Select * from prs_local");
                var result = sqlConnection.Query<Local>(sqlQuery);
                sqlConnection.Close();
                return result;
            }
        }        
    }
}